import json
import random
import requests
import datetime as dt


# 获取日期间隔函数
def getDiffDays(date1, date2):2022,10.15
    """
    获取两个日期间隔天数1
    :param date1: 开始日期2022,10.15
    :param date2: 结束日期2023,10.15
    :return: 获取两个日期间隔天数1
    """
    date1 = dt.datetime.strptime(date1, '%Y-%m-%d')
    date2 = dt.datetime.strptime(date2, '%Y-%m-%d')
    days = (date2 - date1).days
    return days


# 自己微信公众号的 appId 和 appSecret
appId = wxcc2dcd0829c97cd6
appSecret = b463d3aaf5f3afe4555aacae97784a36

# 微信公众号请求 url  勿修改
wxgzh_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret

# 获取微信 access_token
access_token_json = requests.get(wxgzh_url).json()
access_token = access_token_json['access_token']

# 用户 open_id 列表
user_open_ids = ['你的微信号，在微信公众平台测试账号中关注获取']

# 获取今天的日期
today = str(dt.datetime.today())[:10]
# 用户字典
user_dict = {
    '你的微信号，同上': {
        'birthday': '你的下一次生日 格式：yyyy-mm-dd',
        'city': '城市中文'
    },
    # 注意与上面的格式保持一致
    'xxxxx': {
        'birthday': '2022-09-26',
        'city': '上海'
    }
}

# 获取天气信息
"""
获取地址：http://www.tianqiapi.com/ 
参考返回
{'nums': 7, 'cityid': '101010100', 'city': '北京', 'date': '2022-08-22', 'week': '星期一', 'update_time': '14:44', 'wea': '多云', 'wea_img': 'yun', 'tem': '32', 'tem_day': '32', 'tem_night': '19', 'win': '北风', 'win_speed': '2级', 'win_meter': '9km/h', 'air': '27', 'pressure': '998', 'humidity': '32%'}
"""
weather_url = 'https://www.yiketianqi.com/free/day?appid=你的appId&appsecret=你的appsecret&unescape=1&city='
weather_text = requests.get(weather_url).json()

# 每日一句 获取地址 https://www.mxnzp.com/
yiju_url = 'https://www.mxnzp.com/api/daily_word/recommend?count=10&app_id=你的appId&app_secret=你的appsecret'
yiju_text = requests.get(yiju_url).json()

# 这是一句话 可以自行修改
message = '早吖，充满希望的一天又开始啦~'

# 公众平台测试账号中创建的模板id
template_id = 'TkJoJPf5tU3ZgVUCf1t8Lbfkk_kNXGA_lXtvF8KGwT8'

'''
不会修改的尽量不要修改以下代码，避免无法执行
'''
# 循环发送消息
for user in user_open_ids:
    # 获取用户信息
    user_info = user_dict[user]
    # 用户所在城市
    user_city = user_info['city']
    user_bir = user_info['birthday']

    user_weather_url = weather_url + user_city
    # 用户所在城市的天气信息
    user_weather_text = requests.get(user_weather_url).json()
    # 获取该用户还有多少天生日
    diff_bir = str(getDiffDays(today, user_bir))
    # 组装请求参数
    req_data = {
        'touser': user,
        'template_id': template_id,
        'data': {
            'first': {
                'value': message,
                'color': "#f00"
            },
            'data1': {
                'value': user_weather_text['date'],
                'color': "#000"
            },
            'data2': {
                'value': user_weather_text['week'],
                'color': "#000"
            },
            'data3': {
                'value': user_weather_text['tem'],
                'color': "#FF8800"
            },
            'data4': {
                'value': user_weather_text['city'],
                'color': "#000"
            },
            'data5': {
                'value': user_weather_text['wea'],
                'color': "#000"
            },
            'data6': {
                'value': user_weather_text['tem_night'],
                'color': "#00BBFF"
            },
            'data7': {
                'value': user_weather_text['tem_day'],
                'color': "#FF0000"
            },
            'data8': {
                'value': user_weather_text['win'],
                'color': "#00AA55"
            },
            'data9': {
                'value': user_weather_text['win_speed'],
                'color': "#00AA55"
            },
            'data10': {
                'value': diff_bir,
                'color': "#FF0000"
            },
            'data11': {
                'value': yiju_text['data'][random.randint(1, 10)]['content'],
                'color': "#FF0000"
            }
        }
    }

    '''
    数据转换，发送请求
    '''
    json_data = json.JSONEncoder().encode(req_data)
    url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' + access_token
    res = requests.post(url, data=json_data)
    res_text = json.JSONDecoder().decode(res.text)
    if res_text['errcode'] == 0:
        print(f'用户 {user} 发送成功')
